/*
 * Copyright 2020 Echedey López Romero.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Ordenador general del entorno de trabajo destinado a ser usado directamente.
 *
 * @author Echedey López Romero
 */
public class Ordenador extends Equipo {

	/**
	 * Inicializa las especificaciones del ordenador por parámetros. Usa el
	 * constructor de Equipo.
	 *
	 * @param marca empresa o logo
	 * @param modelo nombre publicitario
	 * @param procesador características
	 * @param memoria cantidad en megabytes
	 * @param almacenamiento cantidad en gigabytes
	 */
	public Ordenador(String marca, String modelo, String procesador, int memoria, float almacenamiento) {
		super(marca, modelo, procesador, memoria, almacenamiento);
	}

	/**
	 * Instala un software añadiéndolo de la lista de software. Usa
	 * cuantoSoftware. Sólo permite añadir un objeto de la clase Software de
	 * tipo Sistema Operativo.
	 *
	 * @param software a eliminar
	 * @return true si se pudo efectuar y false si no
	 */
	@Override
	public boolean instalar(Software software) {
		if (software != null) {
			if (software.getTipo() == TipoSoftware.SISTEMAOPERATIVO) {
				if (cuantoSoftware()[0] < 1) {
					return softwares.add(software);
				} else {
					return false;
				}
			} else {
				return softwares.add(software);
			}
		} else {
			throw new NullPointerException("No se ha introducido ningún software.");
		}
	}

	/**
	 * Desinstala un software eliminándolo de la lista de software. Sólo permite
	 * eliminar objetos de la clase Software de tipo Sistema Operativo.
	 *
	 * @param software a desinstalar
	 * @return true si se pudo efectuar y false si no
	 */
	@Override
	public boolean desinstalar(Software software) {
		int posicion = softwares.indexOf(software);

		if (posicion != -1) {
			if (softwares.get(posicion).getTipo() != TipoSoftware.SISTEMAOPERATIVO) {
				softwares.remove(posicion);
				return true;
			} else {
				return false;
			}
		} else {
			throw new IllegalArgumentException("Se ha introducido un software no instalado.");
		}
	}

}
